// cs149 并行处理 ipsc, 自定义并行框架， #pragma编译器并行指令， cuda编程render加速

// 下列snippt运行在windows
#include <stdio.h>
#include <omp.h>
#include <pthread.h>

void* func(void *argcs) {
    printf("hi from tid = %ld\n", pthread_self());
    return NULL;
}

int thread_exp() {
    pthread_t threads[4];
    for (int i = 0; i < 4; ++i) {
        pthread_create(&threads[i], NULL, func, NULL);
    }
    for (int i = 0; i < 4; ++i) {
        pthread_join(threads[i], NULL);
    }
    return 0;
}

int main() {
    thread_exp();
    // gcc -fopenmp //编译器引导，必须手动添加编译参数
    //
    // #pragma 表示这是编译指导语句 表示编译器需要对下面的并行域进行特殊处理
    // omp parallel 表示下面的代码区域 {} 是一个并行域
    //num_threads(4) 表示一共有 4 个线程执行 {} 内的代码

    #pragma omp parallel num_threads(4)
    {
    printf("hi from tid = %d\n", omp_get_thread_num());
    }
    return 0;
}